package com.ophiux.micro.core.domain;

import java.util.List;
import java.util.Map;

import com.ophiux.utils.exception.OphiuxRepositoryException;

/**
 * 说明：基础仓储抽象类   所有定义的仓储需继承它<br>
 * <h1>创 建 人: hehailong</h1><br>
 * 创建日期: 2018年11月8日 下午2:57:22<br>
 * 修改记录：
 */
public interface ICommonRepository<T> {
	
	/**
	 * 说明：保存--含新增、修改<br>
	 * 创 建 人: <h1>hehailong</h1><br>
	 * @param model	保存对象
	 * @return 保存的记录ID
	 * @throws OphiuxRepositoryException
	 */
	public String save(T model) throws OphiuxRepositoryException;

	/**
	 * 说明：删除<br>
	 * 创 建 人: <h1>hehailong</h1><br>
	 * @param uniqueId	唯一约束
	 * @throws OphiuxRepositoryException
	 */
	public void delete(Object uniqueId) throws OphiuxRepositoryException;

	/**
	 * 说明：查询一条数据<br>
	 * 创 建 人: <h1>hehailong</h1><br>
	 * @param uniqueId	唯一约束
	 * @return	T
	 * @throws OphiuxRepositoryException
	 */
	public T selectOneByKey(Object uniqueId)throws OphiuxRepositoryException;
	
	/**
	 * 说明：查询一条数据<br>
	 * 创 建 人: <h1>hehailong</h1><br>
	 * @param map 	多条件
	 * @return	T
	 * @throws OphiuxRepositoryException
	 */
	@SuppressWarnings("rawtypes")
	public T selectOne(Map map)throws OphiuxRepositoryException;

	/**
	 * 说明：查询所有数据<br>
	 * 创 建 人: <h1>hehailong</h1><br>
	 * @param param	Map条件集合
	 * @return	List<T>
	 * @throws OphiuxRepositoryException
	 */
	@SuppressWarnings("rawtypes")
	public List<T> selectAll(Map map) throws OphiuxRepositoryException;

}
